package co.gov.medellin.sdep.sisdep.model.dao;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.sql.DataSource;

import org.springframework.jdbc.core.SqlParameter;
import org.springframework.jdbc.core.support.JdbcDaoSupport;
import org.springframework.jdbc.object.MappingSqlQuery;
import org.springframework.jdbc.object.SqlUpdate;

import co.gov.medellin.sdep.sisdep.common.dto.GenericComponentValueVO;
import co.gov.medellin.sdep.sisdep.model.Comparendo;
import co.gov.medellin.sdep.sisdep.model.FeriaDecDistribucion;
import co.gov.medellin.sdep.sisdep.model.FeriaDecFormVenta;
import co.gov.medellin.sdep.sisdep.model.dao.ComparendoDAOImpl.ValidarDocumentoOperation;
import co.gov.medellin.sdep.sisdep.model.dao.ComparendoDAOImpl.VerificarDocumentoQuery;
import co.gov.medellin.sdep.sisdep.model.dao.FeriaDecDistribucionDAOImpl.BaseQueryOperation;

public class FeriaDecFormVentaDAOImpl extends JdbcDaoSupport implements IFeriaDecFormVentaDAO {

    private InsertOperation insertOperation;

    private UpdateOperation updateOperation;

    private DeleteOperation deleteOperation;

    private DeleteByPrimaryKey deleteByPrimaryKey;

    private FindByPrimaryKeyQuery findByPrimaryKeyQuery;

    private FindByCriteriaQuery findByCriteriaQuery;

    private FindAllQuery findAllQuery;
    
    private FindByRadicadoQuery findByRadicadoQuery;
    
    private FindByAnioQuery findByAnioQuery;
    
    private ValidarNumeroSolicitudes validarNumeroSolicitudes;
    
    public ListaDistribuciones listaDistribuciones;
    
    private VerificarDocumentoQuery verificarDocumentoQuery;

    private FindByActiveStateQuery findByActiveStateQuery;

	private static final String SELECT = "SELECT * FROM REG_FERIA_DEC_FORM_VENTA_T ";
	private static final String WHERE = " WHERE ";
	private static final String PARAMETER = " ?, ";

    public void delete(FeriaDecFormVenta feriaDecFormVenta) {
		deleteOperation.execute( feriaDecFormVenta  );
	}

	public void deleteByPrimaryKey(long id) {
		deleteByPrimaryKey.execute(id);
	}

	public FeriaDecFormVenta findByPrimaryKey(long login) {
		return findByPrimaryKeyQuery.runQuery(login);
	}

	public void insert(FeriaDecFormVenta feriaDecFormVenta) {
		insertOperation.execute( feriaDecFormVenta );
	}

	public void update(FeriaDecFormVenta feriaDecFormVenta) {
		updateOperation.execute( feriaDecFormVenta );
	}

	public FeriaDecFormVenta findByCriteria(FeriaDecFormVenta  feriaDecFormVenta) {
		return findByCriteriaQuery.runQuery(feriaDecFormVenta);
	}

	public List load() {
		return findAllQuery.runQuery();
	}
	
	public List loadByRadicado(FeriaDecFormVenta feriaDecFormVenta) {
		return findByRadicadoQuery.runQuery(feriaDecFormVenta);
	}
	
	public List loadByAnio(FeriaDecFormVenta feriaDecFormVenta) {
		return findAllQuery.runQuery();
	}
	
	public List listaDistribuciones() {
		return listaDistribuciones.runQuery();
	}
	
	public String validarNumeroSolicitudes(FeriaDecFormVenta feriaDecFormVenta){
		return validarNumeroSolicitudes.runQuery(feriaDecFormVenta);
	}
	
	public String verificarDocumento(FeriaDecFormVenta  feriaDecFormVenta) {
		return verificarDocumentoQuery.runQuery(feriaDecFormVenta);
	}
	
	public FeriaDecFormVenta findByActiveState(FeriaDecFormVenta  feriaDecFormVenta) {
		return findByActiveStateQuery.runQuery(feriaDecFormVenta);
	}

	public void initDao() {
    	insertOperation   = new InsertOperation( getDataSource() );
    	updateOperation = new UpdateOperation(  getDataSource() );
    	//deleteOperation = new DeleteOperation(  getDataSource() );
    	//deleteByPrimaryKey = new DeleteByPrimaryKey( getDataSource());
    	//findByPrimaryKeyQuery   = new FindByPrimaryKeyQuery(  getDataSource() );
    	//findByCriteriaQuery = new FindByCriteriaQuery(  getDataSource() );
    	findAllQuery = new FindAllQuery( getDataSource() );
    	findByRadicadoQuery = new FindByRadicadoQuery( getDataSource() );
    	listaDistribuciones = new ListaDistribuciones( getDataSource() );
    	validarNumeroSolicitudes = new ValidarNumeroSolicitudes( getDataSource() );
    	verificarDocumentoQuery = new VerificarDocumentoQuery(getDataSource() );
    	//findByActiveStateQuery = new FindByActiveStateQuery( getDataSource() );
    }

    // ------------- SaveOperation ---------------------------------------
	class InsertOperation extends SqlUpdate	{
		private static final String sql = "INSERT INTO REG_FERIA_DEC_FORM_VENTA_T ("
				  + " ID, "
				  + " ID_SOLICITUD, "
				  + " CCTIVO_SLTUD_FERIA_DEC, "
				  + " ID_DISTR_FERIA_DEC, "
				  + " CODIGO, "
				  + " RADICADO, "
				  + " ID_PERSONA, "
				  + " DIRECCION, "
				  + " CODIGO_BARRIO, "
				  + " BARRIO, "
				  + " CODIGO_COMUNA, "
				  + " COMUNA, "
				  + " ID_PROGRAMA, "
				  + " MANIPULACION_ALIMENTO, "
				  + " SORTEO, "
				  + " GANADOR_SORTEO, "
				  + " CARNE, "
				  + " PUESTO_ASIGNADO, "
				  + " ESTADO, "
				  + " USUARIO_CREA, "
				  + " FECHA_CREA "				  
				  + ") VALUES ("
			  	  + " REG_FERIA_DEC_FORM_VENTA_SEC.nextVal, "
				  + "(SELECT ID  FROM ADM_SOLICITUD_T WHERE RADICADO= ?),"
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER				  
				  + "(SELECT ID FROM ADM_PERSONA_T WHERE IDENTIFICACION =? AND ID_TIPO_IDENTIFICACION=? )," 
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + PARAMETER
				  + "SYSDATE"
				  + ")";
		public  InsertOperation(DataSource ds) {
			super(ds,sql);
			//set here required parameters			
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));					
			compile();
		}
		public void execute(FeriaDecFormVenta feriaDecFormVenta) {
			InsertOperation.this.update( new Object[]{				
				feriaDecFormVenta.getRadicado(),
				feriaDecFormVenta.getCctivoSltudFeriaDec(),
				feriaDecFormVenta.getIdDistrFeriaDec(),
				feriaDecFormVenta.getCodigo(),
				feriaDecFormVenta.getRadicado(),
				feriaDecFormVenta.getDocumento(),
				feriaDecFormVenta.getTipoDocumento(),
				feriaDecFormVenta.getDireccion(),
				feriaDecFormVenta.getCodigoBarrio(),
				feriaDecFormVenta.getBarrio(),
				feriaDecFormVenta.getCodigoComuna(),
				feriaDecFormVenta.getComuna(),
				feriaDecFormVenta.getIdPrograma(),
				feriaDecFormVenta.getManipulacionAlimento(),
				feriaDecFormVenta.getSorteo(),
				feriaDecFormVenta.getGanadorSorteo(),
				feriaDecFormVenta.getCarne(),
				feriaDecFormVenta.getPuestoAsignado(),
				feriaDecFormVenta.getEstado(),
				feriaDecFormVenta.getUsuarioCrea()				
				});
		}
    }

    // ------------- UpdateOperation -------------------------------------
    class UpdateOperation extends SqlUpdate	{
    	private static final String sql = "UPDATE REG_FERIA_DEC_FORM_VENTA_T SET "					  
					  + " ID_SOLICITUD = (SELECT ID  FROM ADM_SOLICITUD_T WHERE RADICADO= ?) ,"
					  + " CCTIVO_SLTUD_FERIA_DEC = ? ,"
					  + " ID_DISTR_FERIA_DEC = ? ,"
					  + " CODIGO = ? ,"
					  + " RADICADO = ? ,"
					  + " ID_PERSONA = (SELECT ID FROM ADM_PERSONA_T WHERE IDENTIFICACION =? AND ID_TIPO_IDENTIFICACION=? ),"
					  + " DIRECCION = ? ,"
					  + " CODIGO_BARRIO = ? ,"
					  + " BARRIO = ? ,"
					  + " CODIGO_COMUNA = ? ,"
					  + " COMUNA = ? ,"
					  + " ID_PROGRAMA = ? ,"
					  + " MANIPULACION_ALIMENTO = ? ,"
					  + " SORTEO = ? ,"
					  + " GANADOR_SORTEO = ? ,"
					  + " CARNE = ? ,"
					  + " PUESTO_ASIGNADO = ? ,"
					  + " ESTADO = ? ,"
					  + " USUARIO_MODIFICA = ? ,"
					  + " FECHA_MODIFICA = SYSDATE "
				  	  + WHERE
				  	  + " ID = ? ";
		public  UpdateOperation(DataSource ds) {
			super(ds,sql);
			//set here required parameters			
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.CHAR));
			declareParameter( new SqlParameter(Types.INTEGER));
			compile();
		}
		public void execute(FeriaDecFormVenta feriaDecFormVenta) {
			UpdateOperation.this.update( new Object[]{				
				feriaDecFormVenta.getRadicado(),
				feriaDecFormVenta.getCctivoSltudFeriaDec(),
				feriaDecFormVenta.getIdDistrFeriaDec(),
				feriaDecFormVenta.getCodigo(),
				feriaDecFormVenta.getRadicado(),
				feriaDecFormVenta.getDocumento(),
				feriaDecFormVenta.getTipoDocumento(),
				feriaDecFormVenta.getDireccion(),
				feriaDecFormVenta.getCodigoBarrio(),
				feriaDecFormVenta.getBarrio(),
				feriaDecFormVenta.getCodigoComuna(),
				feriaDecFormVenta.getComuna(),
				feriaDecFormVenta.getIdPrograma(),
				feriaDecFormVenta.getManipulacionAlimento(),
				feriaDecFormVenta.getSorteo(),
				feriaDecFormVenta.getGanadorSorteo(),
				feriaDecFormVenta.getCarne(),
				feriaDecFormVenta.getPuestoAsignado(),
				feriaDecFormVenta.getEstado(),				
				feriaDecFormVenta.getUsuarioModifica(),
				feriaDecFormVenta.getId(),
				});
		}
    }

    // ------------- DeleteOperation -------------------------------------
    class DeleteOperation extends SqlUpdate	{
		private static final String sql = "DELETE FROM REG_FERIA_DEC_FORM_VENTA_T "
										+ WHERE
			  	  	  					+ " CODIGO = ? ";
		public DeleteOperation(DataSource ds) {
			super(ds,sql);
			declareParameter( new SqlParameter(Types.INTEGER) );
			compile();
		}
		public void execute(FeriaDecFormVenta feriaDecFormVenta) {
			this.update( new Object[]{
				feriaDecFormVenta.getCodigo(),
			});
		}
	}

    // ------------- DeleteByPrimaryKey ----------------------------------
    class DeleteByPrimaryKey extends SqlUpdate	{
		private static final String sql = "DELETE FROM REG_FERIA_DEC_FORM_VENTA_T "
										+ WHERE + "1=1";
		public DeleteByPrimaryKey(DataSource ds) {
			super(ds,sql);
			compile();
		}	
		public void execute(long id) {
			this.update( new Object[]{
			});
		}	
    }

    // ---- BaseQueryOperation for Mapping ResultSet values --------------
	abstract class BaseQueryOperation extends MappingSqlQuery {
		public BaseQueryOperation(DataSource ds,String sql) {
	   		super(ds,sql);
		}	
		protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
			FeriaDecFormVenta feriaDecFormVenta = new FeriaDecFormVenta();
				feriaDecFormVenta.setId(new Long(rs.getLong("ID")));
				feriaDecFormVenta.setIdSolicitud(new Long(rs.getLong("ID_SOLICITUD")));
				feriaDecFormVenta.setCctivoSltudFeriaDec(rs.getString("CCTIVO_SLTUD_FERIA_DEC"));
				feriaDecFormVenta.setIdDistrFeriaDec(new Long(rs.getLong("ID_DISTR_FERIA_DEC")));
				feriaDecFormVenta.setIdDistrFeriaDecStr(rs.getString("ID_DISTR_FERIA_DEC"));
				feriaDecFormVenta.setCodigo(rs.getString("CODIGO"));
				feriaDecFormVenta.setRadicado(rs.getString("RADICADO"));
				feriaDecFormVenta.setIdPersona(new Long(rs.getLong("ID_PERSONA")));
				feriaDecFormVenta.setIdPersonaStr(rs.getString("ID_PERSONA"));
				feriaDecFormVenta.setDireccion(rs.getString("DIRECCION"));
				feriaDecFormVenta.setCodigoBarrio(rs.getString("CODIGO_BARRIO"));
				feriaDecFormVenta.setBarrio(rs.getString("BARRIO"));
				feriaDecFormVenta.setCodigoComuna(rs.getString("CODIGO_COMUNA"));
				feriaDecFormVenta.setComuna(rs.getString("COMUNA"));
				feriaDecFormVenta.setIdPrograma(new Long(rs.getLong("ID_PROGRAMA")));
				feriaDecFormVenta.setIdProgramaStr(rs.getString("ID_PROGRAMA"));
				feriaDecFormVenta.setManipulacionAlimento(rs.getString("MANIPULACION_ALIMENTO"));
				feriaDecFormVenta.setSorteo(rs.getString("SORTEO"));
				feriaDecFormVenta.setGanadorSorteo(rs.getString("GANADOR_SORTEO"));
				feriaDecFormVenta.setCarne(rs.getString("CARNE"));
				feriaDecFormVenta.setPuestoAsignado(new Long(rs.getLong("PUESTO_ASIGNADO")));
				feriaDecFormVenta.setPuestoAsignadoStr(rs.getString("PUESTO_ASIGNADO"));	
				feriaDecFormVenta.setEstado(rs.getString("ESTADO"));
				feriaDecFormVenta.setUsuarioCrea(rs.getString("USUARIO_CREA"));
				feriaDecFormVenta.setFechaCrea(rs.getDate("FECHA_CREA"));		
				feriaDecFormVenta.setUsuarioModifica(rs.getString("USUARIO_MODIFICA"));
				feriaDecFormVenta.setFechaModifica(rs.getDate("FECHA_MODIFICA"));	
				feriaDecFormVenta.setTipoDocumento(rs.getString("ID_TIPO_DTO"));
				feriaDecFormVenta.setDocumento(rs.getString("IDENTIFICACION"));
				if(feriaDecFormVenta.getManipulacionAlimento() != null && feriaDecFormVenta.getManipulacionAlimento().equals("S"))
					feriaDecFormVenta.setManipulacionAlimentoChk(true);
				if(feriaDecFormVenta.getSorteo() != null && feriaDecFormVenta.getSorteo().equals("S"))
					feriaDecFormVenta.setSorteoChk(true);
				if(feriaDecFormVenta.getGanadorSorteo() != null && feriaDecFormVenta.getGanadorSorteo().equals("S"))
					feriaDecFormVenta.setGanadorSorteoChk(true);
				if(feriaDecFormVenta.getCarne() != null && feriaDecFormVenta.getCarne().equals("S"))
					feriaDecFormVenta.setCarneChk(true);
				
			return feriaDecFormVenta;
		}
    }

	
	 // ---- BaseQueryOperation for Mapping ResultSet values --------------
	abstract class ValidarDocumentoOperation extends MappingSqlQuery {
		public ValidarDocumentoOperation(DataSource ds,String sql) {
	   		super(ds,sql);
		}	
		protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
			
				String existe = rs.getString("EXISTE");
			return existe;
		}
  }
	
    // ---- BaseQueryOperation for Mapping ResultSet values --------------
	abstract class ValidacionQueryOperation extends MappingSqlQuery {
		public ValidacionQueryOperation(DataSource ds,String sql) {
	   		super(ds,sql);
		}	
		protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
			
			Long cantidad = new Long(rs.getLong("CANTIDAD"));
			
			return cantidad;
		}
    }
	
    // ---- BaseQueryOperation for Mapping ResultSet values --------------
	abstract class ListaDistribucionQueryOperation extends MappingSqlQuery {
		public ListaDistribucionQueryOperation(DataSource ds,String sql) {
	   		super(ds,sql);
		}	
		protected Object mapRow(ResultSet rs, int rownum) throws SQLException {
				ArrayList typeValueList = new ArrayList();
				String registro[] = {"0","0"};
				registro[0]= rs.getString("ID");
				registro[1]= rs.getString("VRT_NOMBRE");
				typeValueList.add(registro);
				registro = null;
			return typeValueList;
		}
    }

    // ------------- FindByPrimaryKeyQuery -------------------------------
    class FindByPrimaryKeyQuery extends BaseQueryOperation {
		private static final String sql = SELECT
										+ WHERE + "1=1";
    	public FindByPrimaryKeyQuery(DataSource ds) {
    		super(ds,sql);
			compile();
    	}
    	public FeriaDecFormVenta runQuery(long id) {
			List result =  execute( new Object[]{new Long(id)});
			if ( result.size() > 0 ) {
        		return (FeriaDecFormVenta) result.get(0);
        	} else {
        		return null;
        	}
    	}
    }

    // ------------- FindByCriteriaQuery ---------------------------------    
    class FindByCriteriaQuery extends BaseQueryOperation {
		private static final String sql = SELECT
										+ WHERE + " 1=1 ";
			//For required criteria elements uncomment required values
			  	  	  					//+ " AND ID = ? "
			  	  	  					//+ " AND ID_SOLICITUD = ? "
			  	  	  					//+ " AND CCTIVO_SLTUD_FERIA_DEC = ? "
			  	  	  					//+ " AND ID_DISTR_FERIA_DEC = ? "
			  	  	  					//+ " AND CODIGO = ? "
			  	  	  					//+ " AND RADICADO = ? "
			  	  	  					//+ " AND ID_PERSONA = ? "
			  	  	  					//+ " AND DIRECCION = ? "
			  	  	  					//+ " AND CODIGO_BARRIO = ? "
			  	  	  					//+ " AND BARRIO = ? "
			  	  	  					//+ " AND CODIGO_COMUNA = ? "
			  	  	  					//+ " AND COMUNA = ? "
			  	  	  					//+ " AND ID_PROGRAMA = ? "
			  	  	  					//+ " AND MANIPULACION_ALIMENTO = ? "
			  	  	  					//+ " AND SORTEO = ? "
			  	  	  					//+ " AND GANADOR_SORTEO = ? "
			  	  	  					//+ " AND CARNE = ? "
			  	  	  					//+ " AND PUESTO_ASIGNADO = ? "
			  	  	  					//+ " AND ESTADO = ? "
			  	  	  					//+ " AND USUARIO_CREA = ? "
			  	  	  					//+ " AND FECHA_CREA = ? "
			  	  	  					//+ " AND USUARIO_MODIFICA = ? "
			  	  	  					//+ " AND FECHA_MODIFICA = ? "
										//+ "";
    	public FindByCriteriaQuery(DataSource ds) {
    		super(ds,sql);
    		//For required criteria elements uncomment required values
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.INTEGER) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.DATE) );
			//declareParameter( new SqlParameter(Types.CHAR) );
			//declareParameter( new SqlParameter(Types.DATE) );
			compile();
    	}
    	public FeriaDecFormVenta runQuery(FeriaDecFormVenta feriaDecFormVenta) {
			List result =  execute( new Object[]{
			//For required criteria elements uncomment required values
				//feriaDecFormVenta.getId(),
				//feriaDecFormVenta.getIdSolicitud(),
				//feriaDecFormVenta.getCctivoSltudFeriaDec(),
				//feriaDecFormVenta.getIdDistrFeriaDec(),
				//feriaDecFormVenta.getCodigo(),
				//feriaDecFormVenta.getRadicado(),
				//feriaDecFormVenta.getIdPersona(),
				//feriaDecFormVenta.getDireccion(),
				//feriaDecFormVenta.getCodigoBarrio(),
				//feriaDecFormVenta.getBarrio(),
				//feriaDecFormVenta.getCodigoComuna(),
				//feriaDecFormVenta.getComuna(),
				//feriaDecFormVenta.getIdPrograma(),
				//feriaDecFormVenta.getManipulacionAlimento(),
				//feriaDecFormVenta.getSorteo(),
				//feriaDecFormVenta.getGanadorSorteo(),
				//feriaDecFormVenta.getCarne(),
				//feriaDecFormVenta.getPuestoAsignado(),
				//feriaDecFormVenta.getEstado(),
				//feriaDecFormVenta.getUsuarioCrea(),
				//feriaDecFormVenta.getFechaCrea(),
				//feriaDecFormVenta.getUsuarioModifica(),
				//feriaDecFormVenta.getFechaModifica(),
				});
			if ( result.size() > 0 ) {
        		return (FeriaDecFormVenta) result.get(0);
        	} else {
        		return null;
        	}
    	}
    }

    // ------------- FindAllQuery ----------------------------------------    
    class FindAllQuery extends BaseQueryOperation {
		private static final String sql = SELECT
										+ WHERE + " 1=1 ";
    	public FindAllQuery(DataSource ds) {
    		super(ds,sql);
			compile();
    	}
    	public List runQuery() {
			List result =  execute();
			if ( result.size() > 0 ) {
        		return  result;
        	} else {
        		return null;
        	}
    	}
    }
    
    // ------------- FindByRadicadoQuery ----------------------------------------    
    class FindByRadicadoQuery extends BaseQueryOperation {
		private static final String sql = "SELECT VEN.*,PER.ID_TIPO_IDENTIFICACION AS ID_TIPO_DTO,PER.IDENTIFICACION  FROM REG_FERIA_DEC_FORM_VENTA_T VEN INNER JOIN "
										 + " ADM_SOLICITUD_T SOL ON VEN.ID_SOLICITUD = SOL.ID INNER JOIN "
										 + " ADM_PERSONA_T PER ON VEN.ID_PERSONA = PER.ID"
										 + " WHERE SOL.RADICADO=?";
    	public FindByRadicadoQuery(DataSource ds) {
    		super(ds,sql);
    		declareParameter( new SqlParameter(Types.CHAR) );
			compile();
    	}
    	public List runQuery(FeriaDecFormVenta feriaDecFormVenta) {
    		List result =  execute( new Object[]{
    				feriaDecFormVenta.getRadicado(),
			});	
			if ( result.size() > 0 ) {
        		return  result;
        	} else {
        		return null;
        	}
    	}
    }
    
    // ------------- FindByAnioQuery ----------------------------------------    
    class FindByAnioQuery extends BaseQueryOperation {
		private static final String sql = "SELECT SORTEO.* FROM REG_FERIA_DEC_FORM_VENTA_T VEN INNER JOIN "
										 + " REG_FERIA_DECEMBRINA_FORM_T FER ON SORTEO.ID_FERIA_DECEMBRINA_FORM = FER.ID "
										 + " WHERE AGNO=? OR '%'=?";
    	public FindByAnioQuery(DataSource ds) {
    		super(ds,sql);
    		declareParameter( new SqlParameter(Types.CHAR) );
    		declareParameter( new SqlParameter(Types.CHAR) );
			compile();
    	}
    	public List runQuery(FeriaDecFormVenta feriaDecFormVenta) {
			List result =  execute( new Object[]{
					feriaDecFormVenta.getAgno(),
					feriaDecFormVenta.getAgno(),
			});			
			if ( result.size() > 0 ) {
        		return  result;
        	} else {
        		return null;
        	}
    	}
    }

    // ------------- FindByActiveStateQuery  -----------------------------
    class FindByActiveStateQuery extends BaseQueryOperation {
		private static final String sql = SELECT
										+ WHERE + "1=1";
    	public FindByActiveStateQuery(DataSource ds) {
    		super(ds,sql);
			compile();
    	}
    	public FeriaDecFormVenta runQuery(FeriaDecFormVenta feriaDecFormVenta) {
			List result =  execute( new Object[]{
			});
			if ( result.size() > 0 ) {
        		return (FeriaDecFormVenta) result.get(0);
        	} else {
        		return null;
        	}
    	}
    }
    
    class ListaDistribuciones extends ListaDistribucionQueryOperation{
    		private static final String sql = "SELECT DIST.ID,VRT_NOMBRE FROM REG_FERIA_DEC_DISTRIBUCION_T DIST INNER JOIN"
    										+ " ADM_VALOR_TIPO_MAESTRA_T VT ON DIST.ID_TIPOLOGIA=VT.ID_VALOR_TIPO";
			public ListaDistribuciones(DataSource ds) {
						super(ds,sql);
						compile();
			}
			public List runQuery() {
					List result =  execute();
					if ( result.size() > 0 ) {
						return result;
					} else {
						return null;
					}
			}
    }

    
    // ------------- FindByAnioQuery ----------------------------------------    
    class ValidarNumeroSolicitudes extends ValidacionQueryOperation {
		private static final String sql = "SELECT  CANTIDAD - COUNT(ID_DISTR_FERIA_DEC) AS CANTIDAD"  
										  + " FROM REG_FERIA_DEC_FORM_VENTA_T VEN INNER JOIN " 
										  + " REG_FERIA_DEC_DISTRIBUCION_T DIST ON VEN.ID_DISTR_FERIA_DEC = DIST.ID "
										  + " WHERE ID_DISTR_FERIA_DEC=? "
										  + " GROUP by CANTIDAD";
    	public ValidarNumeroSolicitudes(DataSource ds) {
    		super(ds,sql);
    		declareParameter( new SqlParameter(Types.INTEGER) );
			compile();
    	}
    	public String runQuery(FeriaDecFormVenta feriaDecFormVenta ) {
			List result = execute( new Object[]{					
					feriaDecFormVenta.getIdDistrFeriaDec()
			});
			if ( result.size() > 0 ) {
        		return  result.get(0).toString();
        	} else {
        		return null;
        	}
    	}
    }

    // ------------- FindByDocumentoQuery ----------------------------------------    
    class VerificarDocumentoQuery extends ValidarDocumentoOperation {
		private static final String sql = "SELECT COALESCE(COUNT(*),0) AS EXISTE  " +
											" FROM ADM_PERSONA_T WHERE IDENTIFICACION =? AND "
										 	+ " ID_TIPO_IDENTIFICACION=? ";
										 
    	public VerificarDocumentoQuery(DataSource ds) {
    		super(ds,sql);			
			declareParameter( new SqlParameter(Types.CHAR) );
			declareParameter( new SqlParameter(Types.CHAR) );
			compile();
    	}
    	public String runQuery(FeriaDecFormVenta feriaDecFormVenta) {
			List result =  execute( new Object[]{							
					feriaDecFormVenta.getDocumento(),
					feriaDecFormVenta.getTipoDocumento()
			});
			if ( result.size() > 0 ) {
        		return  result.get(0).toString();
        	} else {
        		return null;
        	}
    	}
    } 
}
